אורך שנה מלא וכו'
מכאן הסקתי שהדרך היחידה לאחסן במסד DATETIME כזה:
היא רק באמצעות עמודה מסוג TEXT
האם ככה אני צריך לפעול + מה היתרונות בלעבוד עם DATETIME באופן כללי מאשר בTEXT..?
20 תשובות
באופן כללי המסד בכלל שומר את הזמן בתור מספר של שניות מאז 1970.
הבעיה שלך זה מה שאתה רואה על המסך. ומה שקורה, זה ש mysql בדרך כלל באופן אוטומטי מתרגמת את המספר הזה לתצוגה טקסטואלית כמו זאת שאתה רואה.
אם אתה רוצה שהיא תתרגם את הזמן לתצוגה אחרת - עליך להישתמש בפונקציה date_format. (שים לב, שזה לא ישנה את הדרך שבה המסד שומר את הזמן, זה ישנה רק את הדרך שבה זה יוצג לך)
בשליפה עצמה תוכל לעשות משהו כזה:
FROM table
ראה את כל האפשרויות של date_format כאן
היתרון של זה שאתה יכול לשלוף לפי תאריך, לעשות השוואות על העמודה (איפה שתאריך גדול מ),
להוסיף תנאים על העמודה הזו ו/או חישובים שלא יכולת לעשות על סתם שדה טקסט.
+ השמירה של השדה הזה הרבה יותר אפקטיבית מבחינת זיכרון :)
איך אני משנה את המסד לפורמט קבוע כזה?
אמרת קובץ הגדרות אתה יכול להרחיב?
אני יכול אולי להגדיר את הפורמט של הDATE דרך המסד??
אולי בהגדרה של DEFAULT בעמודה של הDATETIME?
אתה לא תוכל לעשות את זה באחסון מימלא. ככה שלרזותך עומדת הפונקציה date_format
אני רוצה להגדיר את העמודה בפורמט כזה..
זה כמו לתת לה DEFAULT מסוים אני מאמין שחייב להיות
יש לי פורום שבניתי בסגנון "תפוז" ככה שהזמן מופיע מלא פעמים בדף או יותר נכון נשלף מלא פעמים
לא הגיוני כל פעם לעשות DATEFORMAT ועדיף כבר לעבור לTEXT..
ואם מדברים כבר על DATEFORMAT איך אני יכול לשלוף את הכל " * " וגם את DATEFORMAT מבלי לכתוב את כל העמודות?
מצטער על ההתייה. אין דרך לעשות את זה לא במחשב שלך ולא באחסון.
האופציה היחידה שלך היא להישתמש ב date_format. אני לא מבין את הבעיה .
נכון שזה נראה מטומטם שהחליטו לעשות את זה ככה, אבל זה ממש לא כי
mysql שומרת את הזמן בתור מספר שניות. הם היו חייבים להחליט על איזשהו פורמט כלשהו לתצוגה טקסטואלית וזה הפורמט שנבחר. אם היו בוחרים את הפורמט שלך - היה מישהו בפורום אחר מתעצבן שזה לא מתאים לו.
ככה שבחרו פורמט כלשהו. אם אתה רוצה פורמט אחר - נתנו לרשותך את date_format
ודווקא זה מאוד הגיוני לעשות date_format. יותר מזה - זה בדיוק מה שמצפים שתעשה.
אוקי הבנתי..
אבל בכל אופן מה יותר זריז ויעיל במקרה שלי TEXT או DATETIME
במקרה שלי הכוונה שאני משתמש בפורמט..
ובוא נגיד שאני משתמש בDATETIME
מה אני צריך להכניס לעמודה הזאת במסד DATE או TIME שניהם פעולת
תשתמש ב datettime
כשאתה רוצה להכניס משהו לעמודה הזאת אתה יכול להכניס את NOW
את שאלת ה"אחסון זמן" מיצינו?
שאלות חדשות הייתי מעדיף בתור שאלות נפרדות. קשה לעקוב אחרי נושא עם 20 תגובות.
בנוסף יש בעיה באתר, כל האנשים עם החוש השישי יצאו לחופשת הקיץ ואם אתה לא כותב בדיוק את הקוד שניסיתי להפעיל ואת הודעת השגיאה שקיבלת - אין מי שיעזור לך.
אהה סבבה..
תודה רבה!
אבל לגבי הTIME איך אני בטוח שזה מכוון לירושליים ולאסיה
אם משהו מהם לא בסדר, תצטרך לשנות את זה בקובפ קונפיגורצה my.cfg
אם אין לך אפשרות לעשות את זה, למשל באחסון, אתה יכול אחרי החיבור למסד להפעיל את השאילת
זאת אומרת לכוון את זה..
אין הבדל הרי בין TIME בSQL לTIME בPHP נכון?
בPHP זה יותר פשוט כי אני פשוט שם לפני הTIME
TIMEZONE
כלומר לכוון את הTIME לזמן בישראל ופשוט אחרי זה להכניס אותו למסד..
בטח שיש הבדלים.
מתוך ברירת מחדל שניהם משתמשים בשעה של השרת.
אבל אתה יכול להגדיר בכל אחת מהן גם שעה אחרת (למקרה שהשעה של השרת לא מוצאת חן בעיניך).
אם אתה מגדיר אותה רק ב php זה משפיע רק על php.
אם אתה מגדיר אותה רק ב mysql זה משפיע רק על mysql
אז מה אני אמור להכניס לעמודה הזאת בPHP?
$time=time();
ואז את הִ$TIME להכניס לשרת??
(הTIME שכתבתי עכשיו מכוון לישראל??)
אתה יכול לכוון את השעה של המנוע MySQL לשעה של המנוע PHP ככה:
$sqlQuery = sprintf("SET `time_zone` = '%s';", date("P"));
תקשיבו רגע השאילתה שלי זה זה:
לפי מה שINTVAL אמר אני צריך לעשות ככה:
אבל אמרנו שהבעיה היא שזה שמסד לא מכוון
אז בעצם מה שאני אמור לעשות זה להריץ את הקוד PHP הזה פעם אחת בלבד כמו שהוא מבלי לשנות בו כלום?
$sqlQuery = sprintf("SET `time_zone` = '%s';", date("P"));
mysql_query($sqlQuery);
נכון.
למרות שלא אמרנו שהמסד לא מכוון. אמרנו שהוא יכול להיות לא מכוון. ואם הוא לא מכוון - אז צריך לעשות את הפקודות האלה.
אז אני מריץ את הקוד הזה ככה בדיוק רק עם תוספת של הסיסמא למסד והדאטבייס?
כן, אני מעדיף להוסיף את השאילתא הזאת גם לקידוד.
זה נראה בערך ככה:
date_default_timezone_set('Asia/Tel_Aviv');
$_CONFIG = array
(
// http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html
'mysql_encoding' => 'utf8',
// http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
'time_zone' => date('P'),
// http://dev.mysql.com/doc/refman/5.5/en/locale-support.html
'lc_time_names' => 'he_IL',
);
mysql_query
("
SET NAMES '{$_CONFIG['mysql_encoding']}',
`time_zone` = '{$_CONFIG['mysql_time_zone']}',
`lc_time_names` = '{$_CONFIG['mysql_locale']}';
")
or die(mysql_error());
--שים לב-- אם יש לך אפשרות לערוך את my.cfg - עדיף כך, זה יחסוך את השאילתא הזאת.
@משתמש_238913
תודה על השיתוף.
הצחיק אותי לגלות שיש asia/jerusalem וגם asia/tel_aviv ברשימה של timezones